#include <jsoncpp/json/json.h>
#include <iostream>
#include <string>
using namespace std;
#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
#include <sstream>

int main() {
    // JSON 字符串
    std::string json_str = R"({
        "name": "Bob",
        "age": 30,
        "isStudent": true,
        "languages": ["Java", "C#", "Go"],
        "address": {
            "city": "San Francisco",
            "country": "USA"
        }
    })";
    
    // 解析 JSON
    Json::CharReaderBuilder reader;
    Json::Value root;
    std::string errors;
    
    std::istringstream json_stream(json_str);
    bool parsingSuccessful = Json::parseFromStream(reader, json_stream, &root, &errors);
    
    if (!parsingSuccessful) {
        std::cout << "Failed to parse JSON: " << errors << std::endl;
        return 1;
    }
    
    // 提取数据
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
    bool isStudent = root["isStudent"].asBool();
    
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "Is Student: " << (isStudent ? "Yes" : "No") << std::endl;
    
    // 处理数组
    std::cout << "Languages: ";
    const Json::Value languages = root["languages"];
    for (const auto& lang : languages) {
        std::cout << lang.asString() << " ";
    }
    std::cout << std::endl;
    
    // 处理嵌套对象
    std::string city = root["address"]["city"].asString();
    std::string country = root["address"]["country"].asString();
    std::cout << "Address: " << city << ", " << country << std::endl;
    
    return 0;
}
// void print(Json::Value root)
// {
//     for (int i = 0; i < root.size(); i++)
//     {
//         if (root[i].isString())
//         {
//             cout << root[i].asString() << endl;
//         }
//         else if (root[i].isInt())
//         {
//             cout << root[i].asInt() << endl;
//         }
//         else if (root[i].isBool())
//         {
//             cout << root[i].asBool() << endl;
//         }
//         else if (root[i].isArray())
//         {
//             print(root[i]);
//         }
//         else if (root[i].isObject())
//         {
//             Json::Value::Members members = root[i].getMemberNames();
//             for (auto &m : members)
//             {
//                 cout << m << " : " << root[i][m] << endl;
//             }
//         }
//     }
// }
// int main()
// {
    
    // 创建 JSON 对象
    // Json::Value root;
    // root["name"] = "Alice";
    // root["age"] = 25;
    // root["isStudent"] = false;

    // // 创建数组
    // Json::Value languages;
    // languages.append("C++");
    // languages.append("Python");
    // languages.append("JavaScript");
    // root["languages"] = languages;

    // // 创建嵌套对象
    // Json::Value address;
    // address["city"] = "New York";
    // address["country"] = "USA";
    // root["address"] = address;

    // // 序列化为字符串
    // Json::StyledWriter styledWriter;
    // std::string pretty_json = styledWriter.write(root); // 美化格式

    // std::cout << "Serialized JSON:" << std::endl;
    // std::cout << pretty_json << std::endl;

    // return 0;
    // Json::Value root;
    // root.append("hello");
    // root.append(123);
    // root.append(true);
    // cout << root[2] << endl;
    // root["name"] = "zhangsan";
    // root["age"] = 20;
    // cout<< root << endl;
    // Json::Value root;
    // root.append("hello");
    // root.append(123);
    // root.append(true);

    // Json::Value person;
    // person.append("zhangsan");
    // person.append(20);
    // root.append(person);

    // Json::Value arr;
    // arr["gender"] = "boy";
    // arr["address"] = "beijing";
    // root.append(arr);

    // Json::StyledWriter writer;
    // string json_str = writer.write(root);
    // cout << "json_str = " << json_str << endl;

    // Json::FastWriter writer2;
    // string json_str2 = writer2.write(root);
    // cout << "json_str2 = " << json_str2 << endl;

    // Json::Value root;
    // root["name"] = "zhangsan";
    // root["age"] = 20;
    // root["married"] = false;
    // root["weight"] = 66.5;
    // Json::StyledWriter writer;
    // string json_str = writer.write(root);
    // cout << "json_str = " << json_str << endl;

    // Json::Value::Members members=root.getMemberNames();
    // for(auto &m : members)
    // {
    //     cout << m << " : " << root[m] << endl;
    // }

    // root.append("hello");
    // root.append(1024);
    // root.append(false);
    // Json::Value person;
    // person.append("zhangsan");
    // person.append(20);
    // root.append(person);
    // Json::Value arr;
    // arr["gender"] = "boy";
    // arr["address"] = "beijing";
    // root.append(arr);
    // print(root);

    // Json::Value root;
    // root["name"] = "zhangsan";
    // root["age"] = 20;
    // root["married"] = false;
    // root["weight"] = 66.5;
    // Json::StyledWriter writer;
    // string json_str = writer.write(root);
    // cout << "json_str = " << json_str << endl;
    // string s=root.toStyledString();
    // cout << "s = " << s << endl;
// }